package m_dsp_media_slot

import (
	"gopkg.in/mgo.v2"
	"gopkg.in/mgo.v2/bson"
	"time"
	"wx-api/adx-bid/common"
	"wx-api/adx-bid/config"
)

type DspMediaSlot struct {
	Id           bson.ObjectId `bson:"_id" json:"id,omitempty"`
	Uqid         string        `bson:"uqid" json:"uqid,omitempty"`
	Code         string        `bson:"code" json:"code,omitempty"`                   //唯一标示
	Name         string        `bson:"name" json:"name,omitempty"`                   //名称
	AdxId        string        `bson:"adx_id" json:"adx_id,omitempty"`               //所属media
	AdxName      string        `bson:"adx_name" json:"adx_name,omitempty"`           //所属media
	Mid          string        `bson:"mid" json:"mid,omitempty"`                     //所属应用id
	MidName      string        `bson:"mid_name" json:"mid_name,omitempty"`           //所属应用名称
	SlotId       string        `bson:"slot_id" json:"slot_id,omitempty"`             //第三方对接广告位id
	SlotName     string        `bson:"slot_name" json:"slot_name,omitempty"`         //第三方对接广告位名称
	SlotType     string        `bson:"slot_type" json:"slot_type,omitempty"`         //1信息流，2banner，3开屏，4视频，5横幅，6插屏，7暂停，8贴片，9激励视频
	TemplateId   string        `bson:"template_id" json:"template_id,omitempty"`     //关联模版id
	TemplateName string        `bson:"template_name" json:"template_name,omitempty"` //关联模版id
	Description  string        `bson:"description" json:"description,omitempty"`     //描述
	ReqNum       int64         `bson:"req_num" json:"req_num,omitempty"`             //每日请求控量
	Flag         int           `bson:"flag" json:"flag,omitempty"`                   //1 开启 2 关闭
	Status       int           `bson:"status" json:"status,omitempty"`               //1 正常 2 删除
	CreateTime   int64         `bson:"create_time" json:"create_time,omitempty"`     //创建时间
	UpdateTime   int64         `bson:"update_time" json:"update_time,omitempty"`     //更新时间
	Version      string        `bson:"version" json:"version,omitempty"`             //版本号
}

func dbGet() *common.TkMongo {
	return config.MgTableDspMediaSlot
}

func Save(a DspMediaSlot) (string, error) {
	a.Id = bson.NewObjectId()
	tmptime := time.Now().Unix()
	a.CreateTime = tmptime
	a.UpdateTime = tmptime
	a.Flag = 1
	a.Status = 1
	a.Version = config.SysVersion
	err := dbGet().Insert(a)
	return a.Id.Hex(), err
}

// 更新
func Update(a DspMediaSlot) error {
	m := bson.M{
		"name":        a.Name,
		"slot_id":     a.SlotId,
		"slot_name":   a.SlotName,
		"slot_type":   a.SlotType,
		"template_id": a.TemplateId,
		"description": a.Description,
		"update_time": time.Now().Unix(),
	}

	return dbGet().Set(bson.M{"_id": a.Id}, m)
}

// 更新状态
func UpdateFalg(id string, flag int) error {
	m := bson.M{
		"flag":        flag,
		"update_time": time.Now().Unix(),
	}

	return dbGet().Set(bson.M{"_id": bson.ObjectIdHex(id)}, m)
}

// 删除
func UpdateDel(id string, status int) error {
	m := bson.M{
		"status":      status,
		"update_time": time.Now().Unix(),
	}

	return dbGet().Set(bson.M{"_id": bson.ObjectIdHex(id)}, m)
}

// 获取所有
func GetAll() []DspMediaSlot {
	list := []DspMediaSlot{}
	_ = dbGet().All(nil, &list)
	return list
}

func GetWAll(a int64) []DspMediaSlot {
	list := []DspMediaSlot{}
	_ = dbGet().All(bson.M{"update_time": bson.M{"$gte": a}}, &list)
	return list
}

// 获取详情
func GetByCode(id string) (*DspMediaSlot, error) {
	a := &DspMediaSlot{}
	err := dbGet().FindOne(bson.M{"_id": bson.ObjectIdHex(id)}, a)
	if err != nil {
		if err == mgo.ErrNotFound {
			return nil, nil
		}
		return nil, err
	}
	return a, nil
}
func GetByCk(id, adx_uid string) (*DspMediaSlot, error) {
	a := &DspMediaSlot{}
	err := dbGet().FindOne(bson.M{"_id": bson.ObjectIdHex(id)}, a)
	if err != nil {
		if err == mgo.ErrNotFound {
			return nil, nil
		}
		return nil, err
	}
	return a, nil
}

// 列表，带分页
func List(id, name, adx_id string, flag, status, pageNum, pageSize int) (*common.PageInfo, error) {
	s := bson.M{}
	if id != "" {
		s["_id"] = bson.ObjectIdHex(id)
	}
	if name != "" {
		s["name"] = bson.M{"$regex": bson.RegEx{name, "i"}}
	}
	if adx_id != "" {
		s["adx_id"] = adx_id
	}
	if flag > 0 {
		s["flag"] = flag
	}
	if status > 0 {
		s["status"] = status
	}
	var list []DspMediaSlot
	return dbGet().FindPageInfo(s, "", pageSize, pageNum, "-update_time", &list)
}
